package felix.things.router.mqtt.persistent;


import java.io.IOException;
import java.util.List;

/**
 * @author Felix
 * @date 2019/7/27
 */
public interface PersistentFileService {

    /**
     * 缓存数据
     *
     * @param topic   topic
     * @param payload 数据
     * @throws IOException 缓存文件异常
     */
    void persistMessage(String topic, byte[] payload) throws IOException;

    /**
     * 返回要发送的消息列表。如果存在存储文件，则返回最旧的存储文件并删除文件。如果不存在存储文件，则返回当前在存储缓冲区中的数据并清除它
     *
     * @return {@see List} of {@see MqttPersistentMessage} to be sent
     * @throws IOException 缓存文件异常
     */
    List<MqttPersistentMessage> getPersistentMessages() throws IOException;

    /**
     * 返回要重新发送的消息列表
     *
     * @return {@see List} of {@see MqttPersistentMessage} to be re-sent
     * @throws IOException 缓存文件异常
     */
    List<MqttPersistentMessage> getResendMessages() throws IOException;

    /**
     * 保存到resend缓存中
     *
     * @param message 消息
     * @throws IOException 缓存文件异常
     */
    void saveForResend(MqttPersistentMessage message) throws IOException;

    /**
     * 保存到resend缓存中
     *
     * @param messages 消息
     * @throws IOException 缓存文件异常
     */
    void saveForResend(List<MqttPersistentMessage> messages) throws IOException;


    /**
     * 转换缓存成json文件
     *
     * @throws IOException 缓存文件异常
     */
    void coverPersistentsToJson() throws IOException;

    /**
     * 读取缓存的json文件
     *
     * @throws IOException 缓存文件异常
     */
    void coverJsonToPersistents() throws IOException;
}
